home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #2 / Amiga Plus CD - 2004 - No. 02.iso / AmiSoft / Comm / tcp / cimon096.lha / cimon096src.lha / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-04-05  |  2.5 KB  |  89 lines

  1. /* ----------------------------------------------------------------------
  2.    cimon - a UNIX command line client for the fli4l imon daemon.            
  3.  
  4.    Public domain, 2001-2002, Rene Herman <rene.herman@mail.com>         
  5. ---------------------------------------------------------------------- */
  6.  
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <limits.h>
  11.  
  12. #include <unistd.h>
  13.  
  14. #include "cimon.h"
  15.  
  16. #define HELP "\
  17. Usage: %s [OPTION]... HOST [COMMAND]\n\
  18. Communicate with the IMON daemon at HOST.\n\
  19. \n\
  20.   -f FILE         read commands from file FILE\n\
  21.   -p PASSWORD     login with password PASSWORD\n\
  22.   -t PORT         connect to HOST at port number PORT\n\
  23.   -h              display this help and exit\n\
  24.   -V              output version information and exit\n\
  25. \n\
  26. When COMMAND is absent and FILE is absent or - read commands from stdin.\n"
  27.  
  28. #define VERSION "0.9.6"
  29.  
  30. int main(int argc, char *argv[])
  31. {
  32.     int         i;
  33.     const char *filename = NULL;
  34.     
  35.     program_name = argv[0];
  36.     while ((i = getopt(argc, argv, "f:p:t:hV")) != -1)
  37.         switch (i) {
  38.         case 'f':
  39.             filename = optarg;
  40.             break;
  41.         case 'p':
  42.             password = optarg;
  43.             break;
  44.         case 't': {
  45.             char *s;
  46.             long  l = strtol(optarg, &s, 0);
  47.             if (*s || l < 1 || l > (long)USHRT_MAX)
  48.                 exit_error("Invalid port number `%s'", optarg);
  49.             port = l;
  50.             break;
  51.         }
  52.         case 'h':
  53.             printf(HELP, program_name);
  54.             return EXIT_SUCCESS;
  55.         case 'V':
  56.             puts(VERSION);
  57.             return EXIT_SUCCESS;
  58.         default:
  59.             exit_usage(NULL);
  60.         }
  61.         
  62.     if (!(argc -= optind)) 
  63.         exit_usage("No host argument supplied");
  64.     if (--argc && filename)
  65.         exit_usage("Cannot read from file and command line at the same time");
  66.  
  67.     imon_open(*(argv += optind));
  68.     if (argc) /* get commands from command line */
  69.         for (;;) {
  70.             imon_puts(*++argv);
  71.             if (!--argc)
  72.                 break;
  73.             imon_putc(' ');
  74.         }
  75.     else { /* get commands from stdin or file */
  76.         if (!filename || !strcmp(filename, "-"))
  77.             filename = "stdin";
  78.         else if (!freopen(filename, "r", stdin))
  79.             exit_errno(filename);
  80.         while ((i = getchar()) != EOF)
  81.             imon_putc(i);
  82.         if (ferror(stdin))
  83.             exit_errno(filename);
  84.     }
  85.     imon_quit();
  86.  
  87.     return EXIT_SUCCESS;
  88. }
  89.